package com.example.demo.repository;

import com.example.demo.model.Question;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
 * Question实体的MongoDB存储库接口
 * 提供对Question文档的CRUD操作和自定义查询方法
 */
@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {

    /**
     * 根据用户ID查找问题列表
     * @param userId 用户ID
     * @return 该用户的所有问题
     */
    List<Question> findByUserId(Long userId);

    /**
     * 根据用户名查找问题列表
     * @param username 用户名
     * @return 该用户名下的所有问题
     */
    List<Question> findByUsername(String username);

    /**
     * 根据问题文本包含的关键词查找问题列表
     * @param keyword 关键词
     * @return 包含该关键词的所有问题
     */
    List<Question> findByQuestionTextContaining(String keyword);

    /**
     * 根据用户名和问题文本关键词查询问题，按创建时间倒序排列
     * @param username 用户名（可选，为null时查询所有用户）
     * @param questionText 问题文本关键词（可选，为null时查询所有问题）
     * @return 按创建时间倒序排列的问题列表
     */
    List<Question> findByUsernameAndQuestionTextContainingOrderByCreatedAtDesc(String username, String questionText);

    /**
     * 根据用户名查询问题，按创建时间倒序排列
     * @param username 用户名
     * @return 按创建时间倒序排列的问题列表
     */
    List<Question> findByUsernameOrderByCreatedAtDesc(String username);

    /**
     * 根据问题文本关键词查询问题，按创建时间倒序排列
     * @param questionText 问题文本关键词
     * @return 按创建时间倒序排列的问题列表
     */
    List<Question> findByQuestionTextContainingOrderByCreatedAtDesc(String questionText);

    /**
     * 查询所有问题，按创建时间倒序排列
     * @return 按创建时间倒序排列的所有问题列表
     */
    List<Question> findAllByOrderByCreatedAtDesc();

    /**
     * 分页查询所有问题，按创建时间倒序排列
     * @param pageable 分页参数
     * @return 分页的问题结果
     */
    Page<Question> findAllByOrderByCreatedAtDesc(Pageable pageable);

    /**
     * 分页查询指定用户名的问题，按创建时间倒序排列
     * @param username 用户名
     * @param pageable 分页参数
     * @return 分页的问题结果
     */
    Page<Question> findByUsernameOrderByCreatedAtDesc(String username, Pageable pageable);

    /**
     * 分页查询包含关键词的问题，按创建时间倒序排列
     * @param questionText 问题文本关键词
     * @param pageable 分页参数
     * @return 分页的问题结果
     */
    Page<Question> findByQuestionTextContainingOrderByCreatedAtDesc(String questionText, Pageable pageable);

    /**
     * 分页查询指定用户名和关键词的问题，按创建时间倒序排列
     * @param username 用户名
     * @param questionText 问题文本关键词
     * @param pageable 分页参数
     * @return 分页的问题结果
     */
    Page<Question> findByUsernameAndQuestionTextContainingOrderByCreatedAtDesc(String username, String questionText, Pageable pageable);
}
